Dependency Injection ব্যবহার

Web Development - এএসপি ডট (ASP.Net) - কন্ট্রোলার এবং অ্যাকশন মেথড |

Dependency Injection (DI) হলো একটি ডিজাইন প্যাটার্ন যা কম্পোনেন্টগুলোর মধ্যে ডিপেনডেন্সি বা নির্ভরতাগুলি ইনজেক্ট করার জন্য ব্যবহৃত হয়। ASP.Net Core অ্যাপ্লিকেশনগুলিতে Dependency Injection খুবই গুরুত্বপূর্ণ এবং এটি বিল্ট-ইন ভাবে সমর্থিত, যা অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ডিপেনডেন্সি ম্যানেজমেন্টকে সহজ করে তোলে।


Dependency Injection কি?

Dependency Injection (DI) একটি প্রযুক্তি যা ক্লাসগুলোর মধ্যে ব্যবহৃত ডিপেনডেন্সি (যেমন সার্ভিস, অবজেক্ট, বা রিসোর্স) বাইরের কোনো উৎস থেকে ইনজেক্ট করে, যাতে সেই ক্লাসগুলি সরাসরি তাদের ডিপেনডেন্সি তৈরি না করে। এর ফলে কোডের মডুলারিটি, রিইউজেবিলিটি এবং টেস্টেবিলিটি বৃদ্ধি পায়।

ASP.Net Core এ, DI ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনকে আরও বেশি ফ্লেক্সিবল, স্কেলেবল এবং টেস্টযোগ্য করা হয়।


ASP.Net Core-এ Dependency Injection কিভাবে কাজ করে?

ASP.Net Core-এর Startup.cs ফাইলে ConfigureServices মেথডে নির্দিষ্ট পরিষেবাগুলোর জন্য ডিপেনডেন্সি রেজিস্টার করা হয় এবং Configure মেথডে সেই পরিষেবাগুলি কনফিগার ও ব্যবহার করা হয়।

ASP.Net Core এর DI এর মূল উপাদানগুলো হলো:

  • Transient: একবার ব্যবহার শেষে ইনস্ট্যান্সটি ধ্বংস হয়। এই পরিষেবাটি স্বল্পমেয়াদী এবং প্রতি অনুরোধে নতুনভাবে তৈরি হয়।
  • Scoped: একসাথে এক বা একাধিক HTTP অনুরোধের জন্য একই ইনস্ট্যান্স ব্যবহার হয়।
  • Singleton: অ্যাপ্লিকেশনজুড়ে একটি ইনস্ট্যান্স তৈরি হয় এবং সবসময় সেই এক ইনস্ট্যান্স ব্যবহৃত হয়।

Dependency Injection কিভাবে ব্যবহার করবেন?

১. প্রথমে Service Interface তৈরি করুন

একটি ইন্টারফেস তৈরি করুন যা আপনার সার্ভিসের জন্য শর্তাবলী নির্ধারণ করবে।

public interface IProductService
{
    IEnumerable<string> GetAllProducts();
}

২. Service ক্লাস তৈরি করুন

এখন, সেই ইন্টারফেসটি ইমপ্লিমেন্ট করে একটি ক্লাস তৈরি করুন।

public class ProductService : IProductService
{
    public IEnumerable<string> GetAllProducts()
    {
        return new List<string> { "Product 1", "Product 2", "Product 3" };
    }
}

৩. Dependency Injection রেজিস্টার করা

এখন, Startup.cs ফাইলে ConfigureServices মেথডে এই সার্ভিসটি রেজিস্টার করুন।

public void ConfigureServices(IServiceCollection services)
{
    // DI কন্টেনারে সার্ভিস রেজিস্টার করা
    services.AddScoped<IProductService, ProductService>();

    services.AddControllersWithViews();
}

এখানে, AddScoped ব্যবহার করা হয়েছে, যার মানে হল সার্ভিসটি HTTP request এর জন্য Scoped হবে। অর্থাৎ, একই HTTP অনুরোধের মধ্যে একাধিক কন্ট্রোলারে একই ইনস্ট্যান্স ব্যবহার হবে, কিন্তু নতুন HTTP অনুরোধের জন্য নতুন ইনস্ট্যান্স তৈরি হবে।

৪. Controller এ Dependency Inject করা

এখন আপনার কন্ট্রোলারে এই সার্ভিসটি ইনজেক্ট করুন। কন্ট্রোলারে Constructor Injection ব্যবহার করা হয়।

public class HomeController : Controller
{
    private readonly IProductService _productService;

    // DI মাধ্যমে সার্ভিস ইনজেক্ট করা হচ্ছে
    public HomeController(IProductService productService)
    {
        _productService = productService;
    }

    public IActionResult Index()
    {
        var products = _productService.GetAllProducts();
        return View(products);
    }
}

৫. Service ব্যবহার করা

এখন HomeController এর মধ্যে ইনজেক্ট করা সার্ভিসটি ব্যবহার করা হচ্ছে, যা কন্ট্রোলারের Index() অ্যাকশনে GetAllProducts() মেথডের মাধ্যমে ডেটা রিটার্ন করছে।


Dependency Injection এর সুবিধা

  1. কোডের পুনঃব্যবহারযোগ্যতা (Reusability):
    • Dependency Injection ব্যবহারের মাধ্যমে সার্ভিসগুলো পুনঃব্যবহারযোগ্য হয়, কারণ সার্ভিসটি কেবল নির্দিষ্ট ইন্টারফেসের মাধ্যমে অ্যাক্সেস করা যায় এবং তার ইমপ্লিমেন্টেশন পরিবর্তন করা সহজ।
  2. টেস্টিং সুবিধা:
    • DI টেস্টিং সহজ করে তোলে, কারণ আপনি মক সার্ভিস বা স্টাব ব্যবহার করে ইউনিট টেস্ট করতে পারবেন, যা সরাসরি বাস্তব ডিপেনডেন্সি থেকে মুক্ত।
  3. স্কেলেবিলিটি:
    • আপনি সহজেই নতুন সার্ভিস যোগ করতে পারেন এবং প্রয়োজনে পরিষেবা রেজিস্ট্রেশন পরিবর্তন করতে পারেন।
  4. কোডের মডুলারিটি বৃদ্ধি:
    • কোডের বিভিন্ন অংশের মধ্যে একে অপরের উপর নির্ভরতা কমিয়ে মডুলারিটি বৃদ্ধি পায়।

বিভিন্ন লাইফটাইম সার্ভিস ব্যবহার

ASP.Net Core DI সিস্টেম তিনটি ধরনের লাইফটাইম সাপোর্ট করে:

  1. Transient: প্রতিটি অনুরোধে নতুন ইনস্ট্যান্স তৈরি হবে।

    services.AddTransient<IProductService, ProductService>();
    
  2. Scoped: প্রতিটি HTTP অনুরোধে একটি ইনস্ট্যান্স থাকবে।

    services.AddScoped<IProductService, ProductService>();
    
  3. Singleton: পুরো অ্যাপ্লিকেশনে একমাত্র ইনস্ট্যান্স ব্যবহার হবে।

    services.AddSingleton<IProductService, ProductService>();
    

সারাংশ

ASP.Net Core অ্যাপ্লিকেশনগুলোতে Dependency Injection (DI) ব্যবহারের মাধ্যমে আপনি সহজে সার্ভিসগুলো রেজিস্টার, ম্যানেজ এবং কনফিগার করতে পারেন, যা কোডের মডুলারিটি, স্কেলেবিলিটি, এবং টেস্টেবিলিটি বৃদ্ধি করে। DI ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনগুলির মধ্যে low coupling এবং high cohesion নিশ্চিত করা সম্ভব হয়, যা একে সহজে মেইনটেইন এবং আপডেট করা যায়।

Content added By
Promotion